/**
 * Created by bian on 16-3-26.
 */
/**
 * Promise式风格
 * Promise -> 保证完成
 * */
var Promise = require('bluebird');
var http = require('http');
/**
 * 初识Promise
 * */
// var a = new Promise(function(resolve,reject){
//     resolve('ok');
// }).then(function(data){
//     console.log(data);
//     return data;
// }).then(function(data){
//     data = data + '2';
//     console.log(data);
// });

/**
 * Promise带来的代码风格的改变
 * */

// var fs = Promise.promisifyAll(require("fs"));
// //非Promise
// fs.readFile('step0.js',"utf8",function(err,contents){
//     console.log(contents);
// });
//
// //Promise
// fs
//     .readFileAsync("step0.js", "utf8")
//     .then(function(contents) {
//     console.log(contents);
//     }).catch(function(e) {
//     });
/**
 * 看起来正确的代码，其实并不是Promise
 * */
var p = new Promise(function(resolve,reject){
    resolve();
});
// p = p.then(function(){
//     http.get('http://www.baidu.com',function(data){
//         console.log('this is step1');
//         return data;
//     });
// }).then(function(data){
//     http.get('http://www.baidu.com',function(data){
//         console.log('this is step2');
//         return data;
//     });
// }).then(function(data){
//     http.get('http://www.baidu.com',function(data){
//         console.log('this is step3');
//         return data;
//     });
// }).then(function(data){
//     http.get('http://www.baidu.com',function(data){
//         console.log('this is step4');
//     });
// });




/**
 * 异步大坑
 * */
// p = p.then(function(){
//     http.get('http://www.baidu.com',function(data){
//         console.log('this is step1');
//         return data;
//     });
// }).then(function(data){
//     console.log('data from step1');
//     http.get('http://www.baidu.com',function(data){
//         console.log('this is step2');
//         return data;
//     });
// }).then(function(data){
//     console.log('data from step2');
//     http.get('http://www.baidu.com',function(data){
//         console.log('this is step3');
//         return data;
//     });
// }).then(function(data){
//     console.log('data from step3');
//     http.get('http://www.baidu.com',function(data){
//         console.log('this is step4');
//     });
// });

/**
 * 面对异步Promise的用法：
 * */
// function getData(url) {
//     return new Promise(function(resolve) {
//         http.get(url,function(data){
//             resolve(data);              //最最核心的代码
//         });
//     });
// }
// var url = 'http://www.baidu.com';
// var p = getData(url);  // step1
// p = p.then(function(data){
//     console.log('here is step 2');
//     console.log('this is step1 data:' + data.statusCode);
//     return getData(url);
// }).then(function(data){
//     console.log('here is step 3');
//     console.log('this is step2 data:' + data.statusCode);
//     return getData(url);
// }).then(function(data){
//     console.log('here is step 4');
//     console.log('this is step3 data:' + data.statusCode);
//     return getData(url);
// }).then(function(data){
//     console.log('here is step 5');
//     console.log('this is step4 data:' + data.statusCode);
//     return getData(url);
// });

/**
 * Promise的代表框架：Express
 * */